
import "babel-polyfill";
import Vue from 'vue';
import VueResource from 'vue-resource'
import iView from 'iview';
import addApi from '@/common/router/addApi';
import {template_default, renderTemplate, baseRoutes} from './router/router';
import store from './store';
import App from './app.vue';
import 'iview/dist/styles/iview.css';
import Util from '@/common/libs/util';
import Cookies from 'js-cookie';
import VueRouter from 'vue-router';

Vue.use(iView);
Vue.use(VueRouter);
Vue.use(VueResource);
Vue.http.options.emulateJSON = true;

Vue.http.post("api/free_value/get", { key: "page" }).then(res => {
    var template = res.body.data && res.body.data.value ? JSON.parse(res.body.data.value) : template_default;
    var renderedRoutes = renderTemplate(template);
    var routes = [...renderedRoutes, ...baseRoutes];
    var router = new VueRouter({
        //mode: 'history',
        routes: routes
    });
    entry(router, routes, renderedRoutes);
});


function entry(router, routes, renderedRoutes) {
    var temp = {}
    // 添加路由前后事件
    router.beforeEach((to, from, next) => {
        iView.LoadingBar.start();
        Util.title(to.meta.title);
        if (Cookies.get('access') != 'admin' && to.name !== 'login') { // 判断是否未登录且前往的页面不是登录页
            next({
                name: 'login'
            });
        } else if (Cookies.get('access') == 'admin' && to.name === 'login') { // 判断是否已经登录且前往的是登录页
            Util.title();
            next({
                name: 'home_index'
            });
        } else {
            const curRouterObj = Util.getRouterObjByName(routes, to.name);
            if (curRouterObj && curRouterObj.permission !== undefined) { // 需要判断权限的路由
                if (Cookies.get('access') == 'admin' && Util.showThisRoute(curRouterObj.permission, temp.vm.$store.state.user.info.permission)) {
                    Util.toDefaultPage([otherRouter, ...appRouter], to.name, router, next); // 如果在地址栏输入的是一级菜单则默认打开其第一个二级菜单的页面
                } else {
                    next({
                        replace: true,
                        name: 'error-403'
                    });
                }
            } else { // 没有配置权限的路由, 直接通过
                Util.toDefaultPage(routes, to.name, router, next);
            }
        }
    });
    
    router.afterEach((to) => {
        iView.LoadingBar.finish();
        window.scrollTo(0, 0);
    });
    
    temp.vm = new Vue({
        el: '#app',
        router: router,
        store: store,
        render: h => h(App),
        // h（）里面是一个组件 这里的app是app.vue文件（一个组件） ，这个组件把el中的挂件即id为app的组件（index.html）中的id为app这个容器给替换掉
        // 这是因为是用render的缘故，如果用component则只是将挂件填入el所指的挂件所指的容器（router-view）中
        // entry.js的作用也就是将app.vue注册到index.html文件中
        mounted () {
        },
        created() {
            this.$store.commit('updateRouterTree', renderedRoutes);
            // 添加自定义接口函数
            addApi(this);
        }
    });
}
